/* 
 * File:   toupper.h
 * Author: Gab'z
 *
 * Created on 8 juin 2012, 13:34
 */

#ifndef TOUPPER_H
#define	TOUPPER_H

#include <algorithm>
#include <string>
#include <cctype>  

namespace calculator {

    /**
     * Foncteur permettant de transformer une chaîne de caractère en majuscules.
     */
    struct toupper {

        /**
         * Converti un caractère en majuscule
         * @param le caractère à transformer en majuscule.
         * @return ce caractère en majuscule
         */
        char operator()(char c) const {
            return std::toupper(static_cast<unsigned char> (c));
        }
    };

    /**
     * Fonction du namespace copie une std::string en sa version en majuscule
     * @param str une std::string à transformer
     * @return une nouvelle chaîne formée des mêmes lettres en majuscule
     */
    std::string toUpper(const std::string& str) {
        std::string res = std::string(str);
        std::transform(str.begin(), str.end(), res.begin(), toupper());
        return res;
    }
}
#endif	/* TOUPPER_H */

